package 面向对象中级.课后练习题;
public class Graphic {
    /**
     * （1）父类Graphic图形
     * public double area()方法：返回0.0
     * public double perimeter()方法：返回0.0
     * public String getInfo()方法，返回图形面积和图形周长
     */
    public double area() {
        return 0.0;
    }

    public double perimeter() {
        return 0.0;
    }

    public String getInfo() {
        return "面积" + area() + "周长" + perimeter();
    }
}
/**
 * （2）子类Circle圆类继承Graphic图形
 * 包含属性：radius，属性私有化
 * 包含get/set方法
 * 重写area()求面积方法
 * 重写perimeter()求周长方法
 * 重写getInfo()方法，返回圆的半径，面积和周长
 */
class Circle extends Graphic{
    private double radius;

    public double getRadius() {
        return radius;
    }

    public void setRadius(double radius) {
        this.radius = radius;
    }

    //重写area()求面积方法
    @Override
    public double area() {
        return Math.PI*radius*radius;
    }

    //重写perimeter()求周长方法
    @Override
    public double perimeter() {
        return 2*Math.PI*radius;
    }

    //重写getInfo()方法，返回圆的半径，面积和周长
    @Override
    public String getInfo() {
        return "圆半径"+radius+","+super.getInfo();
    }
}

/**
 * （3）子类矩形Rectangle继承Graphic图形
 * 包含属性：length、width，属性私有化
 * 包含get/set方法
 * 重写area()求面积方法
 * 重写perimeter()求周长方法
 * 重写getInfo()方法，返回长和宽，面积、周长信息
 */
class Rectangle extends Graphic{
    private double  length;
    private double  width;

    public double getLength() {
        return length;
    }

    public void setLength(double length) {
        this.length = length;
    }

    public double getWidth() {
        return width;
    }

    public void setWidth(double width) {
        this.width = width;
    }

    //重写area()求面积方法
    @Override
    public double area() {
        return length*width;
    }

    //重写perimeter()求周长方法
    @Override
    public double perimeter() {
        return (length+width)*2;
    }

    //重写getInfo()方法，返回长和宽，面积、周长信息
    @Override
    public String getInfo() {
        return "矩形长"+length+",矩形宽"+width+","+super.getInfo();
    }
}

//4）在测试类的main方法中创建多个圆和矩形对象放到Graphic[]类型的数组中，
// 并按照面积从小到大排序输出
class GraphicTest{
    public static void main(String[] args) {
        //用一个数组用来存储各种图形的对象，并且按照各种图形的面积进行排序
        Circle c1 = new Circle();
        c1.setRadius(2);
        Circle c2 = new Circle();
        c2.setRadius(3);

        Rectangle r1 = new Rectangle();
        r1.setLength(4);
        r1.setWidth(5);
        Rectangle r2 = new Rectangle();
        r2.setLength(3);
        r2.setWidth(4);

        Graphic[] shape=new Graphic[4];
        shape[0]=c1;
        shape[1]=c2;
        shape[2]=r1;
        shape[3]=r2;

        System.out.println("排序前");
        for (int i = 0; i < shape.length; i++) {
            System.out.println(shape[i].getInfo());
        }

        //按照面积排序
        for (int i = 0; i < shape.length; i++) {
            for (int j = 0; j < shape.length-1; j++) {
                if (shape[j].area()>shape[i].area()){
                    Graphic temp=shape[j];
                    shape[j]=shape[j+1];
                    shape[j+1]=temp;
                }
            }
        }
        System.out.println("排序后");
        for (int i = 0; i < shape.length; i++) {
            System.out.println(shape[i].getInfo());
        }
    }
}